package arvBinariaInteiros;

public interface ArvoreBinariaInteiros {

	public abstract boolean isEmpty();

	public abstract boolean isLeaf();

	public abstract int altura();

	public abstract boolean pesquisar(int chave);

	public abstract void inserir(int chave);

	/**
	 * Retorna o elemento maximo de uma arvore ou -1 se aq arvore for vazia.
	 * @return
	 */
	public abstract int maximo();

	/**
	 * Retorna o elemento minimo de uma arvore ou -1 se aq arvore for vazia.
	 * @return
	 */
	public abstract int minimo();


	/**
	 * Remove uma chave de uma arvore.
	 * @param chave
	 */
	public abstract void remover(int chave);

	/**
	 * Percorre a arvore em pre-ordem.
	 */
	public abstract void preOrdem();

	/**
	 * Percorre a arvore em ordem
	 */
	public abstract void ordem();

	/**
	 * Percorre a arvore em pos-ordem.
	 */
	public abstract void posOrdem();
	
	/**
	 * Retorna a quantidade de elementos que a arvore possui. Ou seja, quantos elementos
	 * foram inseridos na arvore. A contagem deve ser feita de forma recursiva e nao
	 * acumulada numa variavel.
	 * @return
	 */
	public int countElements();

}